home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / rc-1.000 / rc-1 / rc-1.5-linux / y.tab.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-28  |  37.6 KB  |  1,052 lines

  1. #ifndef lint
  2. static char yysccsid[] = "@(#)yaccpar    1.8 (Berkeley) 01/20/90";
  3. #endif
  4. #define YYBYACC 1
  5. #line 8 "parse.y"
  6. #include "rc.h"
  7. #ifndef lint
  8. #define lint        /* hush up gcc -Wall, leave out the dumb sccsid's. */
  9. #endif
  10. static Node *star, *nolist;
  11. Node *parsetree;    /* not using yylval because bison declares it as an auto */
  12. #line 28 "parse.y"
  13. typedef union {
  14.     struct Node *node;
  15.     struct Redir redir;
  16.     struct Pipe pipe;
  17.     struct Dup dup;
  18.     struct Word word;
  19.     char *keyword;
  20. } YYSTYPE;
  21. #line 22 "y.tab.c"
  22. #define ANDAND 257
  23. #define BACKBACK 258
  24. #define BANG 259
  25. #define CASE 260
  26. #define COUNT 261
  27. #define DUP 262
  28. #define ELSE 263
  29. #define END 264
  30. #define FLAT 265
  31. #define FN 266
  32. #define FOR 267
  33. #define IF 268
  34. #define IN 269
  35. #define OROR 270
  36. #define PIPE 271
  37. #define REDIR 272
  38. #define SREDIR 273
  39. #define SUB 274
  40. #define SUBSHELL 275
  41. #define SWITCH 276
  42. #define TWIDDLE 277
  43. #define WHILE 278
  44. #define WORD 279
  45. #define HUH 280
  46. #define YYERRCODE 256
  47. short yylhs[] = {                                        -1,
  48.     0,    0,   22,   22,    8,    8,   13,   13,    3,    3,
  49.     9,    9,    4,   15,    2,   11,   11,   16,   16,   16,
  50.     5,    5,    6,    6,    6,   19,   19,    7,    7,    7,
  51.     7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
  52.     7,    7,    7,    7,    7,   24,   24,   18,   18,   18,
  53.    12,   12,   17,   17,   20,   20,   10,   10,   10,   10,
  54.    10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
  55.     1,    1,    1,    1,    1,    1,    1,    1,   21,   21,
  56.    14,   14,   14,   23,   23,
  57. };
  58. short yylen[] = {                                         2,
  59.     2,    2,    1,    1,    2,    2,    1,    2,    1,    2,
  60.     1,    2,    3,    3,    3,    0,    2,    1,    2,    2,
  61.     3,    3,    1,    2,    2,    1,    4,    0,    1,    2,
  62.     4,    8,    6,    4,    8,    4,    4,    4,    4,    2,
  63.     2,    3,    3,    3,    2,    0,    1,    1,    2,    2,
  64.     1,    3,    1,    1,    1,    3,    2,    5,    2,    2,
  65.     2,    2,    3,    3,    3,    2,    1,    1,    1,    1,
  66.     1,    1,    1,    1,    1,    1,    1,    1,    0,    2,
  67.     0,    2,    2,    0,    2,
  68. };
  69. short yydefred[] = {                                      0,
  70.     0,    0,    0,    0,   18,    0,   79,    0,    0,    0,
  71.     0,    0,    0,    0,    0,   67,    0,    0,   81,    0,
  72.     0,    0,    0,    0,    0,   51,    0,    0,    0,    0,
  73.     3,    4,    2,   77,   75,   74,   73,   68,   71,   69,
  74.     0,   78,   72,   76,   70,   54,   53,   55,    0,   47,
  75.     0,   59,   60,    0,    0,    0,   84,   66,    0,    0,
  76.     0,    0,    0,   84,    0,    0,    0,   11,    0,    0,
  77.    62,   61,    0,    0,   30,    0,   84,   84,   84,    5,
  78.     6,    8,    0,    0,    1,    0,   50,    0,    0,   63,
  79.    64,    0,   44,    0,    0,    0,    0,    0,    0,    0,
  80.     0,   79,   13,   12,   10,   65,   82,    0,   17,    0,
  81.     0,    0,    0,   52,   56,   79,   84,   14,   85,    0,
  82.     0,   31,   84,    0,    0,    0,    0,    0,   39,    0,
  83.     0,   84,    0,   58,   84,    0,    0,    0,    0,    0,
  84.    79,    0,    0,    0,    0,    0,    0,   24,   35,   25,
  85.    22,   21,
  86. };
  87. short yydgoto[] = {                                      21,
  88.    46,   22,   66,   23,  142,  143,   67,   68,   69,   47,
  89.    75,   27,   28,   70,   57,   29,   48,   30,  122,   94,
  90.    54,   33,   97,   51,
  91. };
  92. short yysindex[] = {                                    874,
  93.    24, 1001,  -82, 1001,    0, 1001,    0,  -27,  -26,  900,
  94.  1001,  -82,  -20,  -82,  -26,    0, 1001, 1134,    0,  900,
  95.     0, 1134, -203,  -30, 1134,    0,  -55,   24, 1134,  826,
  96.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  97.   -66,    0,    0,    0,    0,    0,    0,    0,  849,    0,
  98.  1134,    0,    0,  900, 1001, 1134,    0,    0,  -52,  -52,
  99.  1134, 1001, 1001,    0, -212,  -58,  154,    0, 1134,  426,
  100.     0,    0, -196, 1001,    0, -203,    0,    0,    0,    0,
  101.     0,    0, 1001, 1001,    0, -196,    0,  -52, 1001,    0,
  102.     0, -196,    0,  -52,  -38,   36,  502, -196,  -36,  -52,
  103.   502,    0,    0,    0,    0,    0,    0,  -52,    0,  502,
  104.   502,  502,  -52,    0,    0,    0,    0,    0,    0,  -97,
  105.  -234,    0,    0, 1001, -234,  922, -196, -196,    0,  944,
  106.   502,    0,   -9,    0,    0, -234,  502,  967,  502, -234,
  107.     0,  967,  -45,  154,  967, -234,  448,    0,    0,    0,
  108.     0,    0,
  109. };
  110. short yyrindex[] = {                                    134,
  111.     0,    0,  356,    0,    0,    0,    0,    0,    0,    0,
  112.     0,  356,    0, 1024,    0,    0,    0,  571,    0,    0,
  113.     0,  487,  529,   54,  134,    0,   62,    0,  487,  548,
  114.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  115.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  116.   487,    0,    0,  712,    0,  142,    0,    0,   14,   38,
  117.   487,    0,    0,    0,  -10,    0,  -32,    0,  744,    0,
  118.     0,    0,  749,    0,    0,  529,    0,    0,    0,    0,
  119.     0,    0,    0,    0,    0,  763,    0,   86,    0,    0,
  120.     0,  779,    0,  110,    0,    0,  -34,  788,    0,  380,
  121.   -34,    0,    0,    0,    0,    0,    0,  470,    0,  -34,
  122.   -34,  -34,  404,    0,    0,    0,    0,    0,    0,  529,
  123.     6,    0,    0,  724,   30,    0,  805,  813,    0,    0,
  124.   -34,    0,    0,    0,    0,  119,  -34,  571,  -34,  187,
  125.     0,  571,    0,  -44,  571,  396,    0,    0,    0,    0,
  126.     0,    0,
  127. };
  128. short yygindex[] = {                                      0,
  129.     0,    0,  -23,   12,    0, -104, 1319,    2, -127, 1307,
  130.     7,    0,   57,    0,   70,  -13,   84,    0,    0,  420,
  131.   -81,   59,  369,   31,
  132. };
  133. #define YYTABLESIZE 1464
  134. short yytable[] = {                                      57,
  135.   119,   25,  117,   28,  123,   83,   28,   81,    9,   76,
  136.   145,   50,   55,   56,  145,   26,   87,  145,  124,   62,
  137.   126,   58,   77,   19,   28,   57,   25,   57,   80,   57,
  138.    57,   71,   96,   32,  130,   78,   79,  148,   84,   34,
  139.   150,   89,   61,   26,   63,  105,   26,   20,   57,   19,
  140.    57,   19,   58,   19,   19,   89,   18,   89,    5,  147,
  141.    90,  102,   76,    7,   26,   93,  103,   34,   74,   11,
  142.    34,   48,   19,   20,   79,   20,  118,   20,   20,  149,
  143.    23,   82,  109,   57,   64,   57,   85,   52,   34,   53,
  144.    28,    0,    9,    0,    0,   49,   20,   48,    0,   48,
  145.    65,   48,   48,   72,    0,    0,   76,    0,  120,   19,
  146.     0,    0,   57,  138,   57,    0,    0,    0,    0,   80,
  147.    48,   49,    0,   49,    0,   49,   49,    0,   33,    0,
  148.    26,    0,   91,   20,    0,    0,   19,    0,   19,    0,
  149.     0,    0,    0,   28,   49,   80,    0,   80,    0,   80,
  150.    80,   28,    0,    0,   34,    0,   33,   48,    0,   33,
  151.    20,    0,   20,  104,    5,  132,    0,  114,   80,    0,
  152.     0,   28,  115,    0,   74,   11,    0,   33,    0,   28,
  153.     0,   49,   28,    0,    0,    0,   48,    0,    0,    0,
  154.     0,   81,   28,    0,    0,    0,   27,    0,    0,    0,
  155.    28,    0,    0,    0,    0,   80,    0,    0,    0,    0,
  156.    49,    0,   80,    0,    0,    0,    0,    0,    0,    0,
  157.     0,    0,   28,    0,   27,    0,   77,   27,    0,   28,
  158.   116,    0,   80,    0,   80,   28,   28,    0,    0,   78,
  159.    79,    0,    0,   33,    0,   27,   57,   57,   57,   57,
  160.    57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
  161.    57,   57,   57,    0,   57,   57,   57,   57,   57,   26,
  162.    19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
  163.    19,   19,   19,   19,   19,   19,   19,   31,   19,   19,
  164.    19,   19,   19,   34,   20,   20,   20,   20,   20,   20,
  165.    20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
  166.    20,   27,   20,   20,   20,   20,   20,    7,   48,   48,
  167.    48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
  168.    48,   48,   48,   48,   48,    0,   48,   48,   48,   48,
  169.    48,    0,   49,   49,   49,   49,   49,   49,   49,   49,
  170.    49,   49,   49,   49,   49,   49,   49,   49,   49,    0,
  171.    49,   49,   49,   49,   49,   46,   80,   80,   80,   80,
  172.    80,    0,   80,   80,   80,   80,   80,   80,   80,   80,
  173.    80,   80,   33,    0,   80,   80,   80,   80,   80,   79,
  174.    28,   46,    0,   46,    0,   46,   46,   28,   28,    0,
  175.     0,    0,    0,   28,   28,   32,    0,    0,    0,    0,
  176.    77,   28,   28,   15,   46,   79,    0,   79,    0,   79,
  177.    79,   49,    0,   78,   79,    0,    0,    0,    0,   59,
  178.    60,    0,  101,   32,    0,  107,   32,    0,   79,   15,
  179.     0,   15,    0,   15,   15,  110,  111,  112,    0,   88,
  180.    27,   46,    0,    0,   32,    0,    0,  151,    0,    0,
  181.     0,   17,   15,    0,    0,   19,  106,    0,    0,    0,
  182.     0,    0,    0,    0,   95,   79,    0,    0,   46,   83,
  183.    46,   99,  100,   17,    0,  131,    0,   19,    0,  108,
  184.     0,  133,    0,   59,    0,    0,   28,    0,    0,   15,
  185.   137,    0,  113,  139,   79,   83,  152,    0,    0,   83,
  186.    83,  119,    0,    0,    0,    0,    0,    0,    0,    0,
  187.    32,   20,    0,    0,   28,    0,   15,   28,   15,    0,
  188.     0,    0,    0,    0,    0,    0,    0,   17,   16,    0,
  189.     0,   19,    0,   20,    0,   28,    0,    0,    0,    0,
  190.     0,    0,    0,    0,    0,    0,    0,   29,    0,    0,
  191.     0,    0,    0,    0,    0,   83,   16,    0,    0,   16,
  192.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  193.    28,    0,    0,    0,    0,   29,    0,   16,   29,    0,
  194.     0,    0,    0,    0,    0,    0,    0,   20,    0,    0,
  195.     0,    0,    0,    0,    0,    0,   29,    0,   28,    0,
  196.     0,   28,   46,   46,   46,    0,   46,   46,    0,   46,
  197.    46,   46,   46,   46,   18,   46,   46,   46,   46,   28,
  198.    46,   46,   46,   46,   46,    0,   79,   79,   79,   79,
  199.    79,    0,   79,   79,   79,   79,   79,   79,   79,   79,
  200.    79,   79,    0,   16,   79,   79,   79,   79,   79,   32,
  201.    15,   15,   15,    0,   15,   15,    0,   15,   15,   15,
  202.    15,   15,   29,   15,   15,   15,   15,    0,   15,   15,
  203.    15,   15,   15,    2,   34,   35,    4,    0,   36,    0,
  204.     6,   37,   38,   39,   40,   28,    0,   41,    0,    0,
  205.    42,   43,   44,   45,   16,    2,   34,   35,    4,    0,
  206.    36,    0,    6,   37,   38,   39,   40,    0,    0,   41,
  207.     0,   45,   42,   43,   44,   45,   16,   83,   83,   83,
  208.    83,    0,   83,   36,   83,   83,   83,   83,   83,    0,
  209.     0,   83,    0,   28,   83,   83,   83,   83,   83,   45,
  210.    28,    0,   45,   28,    0,    0,   28,   28,   41,    2,
  211.     3,   36,    4,    5,   36,    0,    6,    7,    8,    9,
  212.    45,    0,   40,   10,   11,    0,   12,   13,   14,   15,
  213.    16,   28,   36,    0,   28,   16,   41,    0,   42,   41,
  214.     0,    0,   16,    0,    0,    0,    0,   43,   16,   16,
  215.    40,    0,   28,   40,   29,    0,    0,   41,    0,    0,
  216.     0,   29,    0,    0,   37,    0,   42,   29,   29,   42,
  217.     0,   40,   38,    0,    0,   43,    0,   28,   43,    0,
  218.     0,    0,    0,    0,    0,    0,   45,   42,    0,    0,
  219.    28,   28,   37,    0,    0,   37,   43,    0,   36,    0,
  220.    38,    0,    0,   38,    0,    0,    0,    0,    0,    0,
  221.     0,   17,    0,   37,    0,   19,    0,    0,   28,    0,
  222.     0,   38,    0,   41,    0,    0,    0,    0,    0,    0,
  223.     0,    0,    0,    0,   17,    0,    0,   40,   19,    0,
  224.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  225.     0,    0,    0,   42,    0,    0,    0,    0,    0,   17,
  226.     0,    0,   43,   19,    0,    0,    0,    0,    0,    0,
  227.     0,   20,    0,    0,    0,    0,    0,    0,    0,   37,
  228.     0,    0,    0,    0,    0,   17,    0,   38,    0,   19,
  229.     0,    0,   89,    0,   20,    0,    0,    0,    0,    0,
  230.     0,    0,    0,    0,    0,    0,    0,   17,    0,    0,
  231.     0,   19,  134,    0,    0,    0,    0,    0,   45,   20,
  232.     0,   18,    0,    0,    0,   45,    0,    0,    0,   17,
  233.    36,   45,   45,   19,  135,    0,    0,   36,    0,    0,
  234.     0,    0,    0,   36,   36,   20,   18,    0,    0,    0,
  235.    28,    0,   17,    0,    0,   41,   19,    0,    0,    0,
  236.     0,    0,   41,   28,   28,    0,    0,   20,   41,   40,
  237.     0,    0,   18,    0,    0,    0,   40,    0,    0,    0,
  238.     0,    0,   40,    0,    0,   42,   17,    0,    0,   20,
  239.    19,    0,   42,    0,   43,    0,    0,    0,   42,    0,
  240.     0,   43,    0,    0,    0,    0,    0,   43,    0,   46,
  241.     0,   37,   20,   46,    0,    0,    0,    0,   37,   38,
  242.     0,    0,    0,    0,   37,    0,   38,    0,    0,    0,
  243.     0,    0,   38,    2,   34,   35,    4,    5,   36,   18,
  244.     6,   37,   38,   39,   40,    0,   20,   10,   11,    0,
  245.    42,   43,   44,   45,   16,    0,    2,   34,   35,    4,
  246.     0,   36,    0,    6,   37,   38,   39,   40,    0,   46,
  247.    41,    0,    0,   42,   43,   44,   45,   16,    0,    1,
  248.     0,    2,    3,    0,    4,    5,    0,    0,    6,    7,
  249.     8,    9,    0,    0,    0,   10,   11,    0,   12,   13,
  250.    14,   15,   16,    0,    0,    0,    0,    2,   34,   35,
  251.     4,    0,   36,    0,    6,   37,   38,   39,   40,   17,
  252.     0,   41,    0,   19,   42,   43,   44,   45,   16,    2,
  253.    34,   35,    4,    0,   36,    0,    6,   37,   38,   39,
  254.    40,    0,    0,   41,    0,    0,   42,   43,   44,   45,
  255.    16,    2,   34,   35,    4,    0,   36,    0,    6,   37,
  256.    38,   39,   40,    0,    0,   41,    0,    0,   42,   43,
  257.    44,   45,   16,    0,    2,    3,  141,    4,    5,   20,
  258.     0,    6,    7,    8,    9,    0,    0,    0,   10,   11,
  259.     0,   12,   13,   14,   15,   16,    0,    0,    0,    0,
  260.     0,    0,    0,    0,    0,    0,   18,    0,    2,   34,
  261.    35,    4,    0,   36,    0,    6,   37,   38,   39,   40,
  262.     0,    0,   41,    0,    0,   42,   43,   44,   45,   16,
  263.     0,   46,   46,   46,   46,    0,   46,    0,   46,   46,
  264.    46,   46,   46,    0,    0,   46,    0,    0,   46,   46,
  265.    46,   46,   46,    0,    0,    0,   26,    0,    0,    0,
  266.     0,    0,    0,    0,    0,    0,    0,    0,   24,    0,
  267.     0,    0,    0,    0,   26,    0,    0,    0,   26,    0,
  268.     0,   26,    0,    0,    0,   26,    0,    0,    0,    0,
  269.    73,    0,    0,   24,    0,    0,    0,   86,    0,    0,
  270.     0,    0,    0,    0,    0,    0,    0,   26,    0,    0,
  271.     0,    0,   26,    0,    0,    0,    0,   26,    0,   92,
  272.     0,    0,    0,    0,    0,   26,    0,    0,    0,   98,
  273.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  274.     0,    2,    3,    0,    4,    5,    0,    0,    6,    7,
  275.     8,    9,    0,   26,    0,   10,   11,   26,   12,   13,
  276.    14,   15,   16,    0,    0,  121,   26,   26,   26,  125,
  277.     0,    0,    0,    0,    0,    0,    0,    0,  127,  128,
  278.   129,    0,    0,    0,    0,    0,    0,   26,    0,    0,
  279.     0,    0,    0,   26,   26,   26,    0,    0,   26,  136,
  280.     0,   26,    0,    0,    0,  140,  144,  146,    0,    0,
  281.   144,    0,    0,  144,
  282. };
  283. short yycheck[] = {                                      10,
  284.    10,    0,   41,   38,   41,   61,   41,   38,   41,   23,
  285.   138,   94,   40,   40,  142,   10,   30,  145,  100,   40,
  286.   102,   10,  257,   10,   59,   36,   25,   38,   59,   40,
  287.    41,   20,   56,   10,  116,  270,  271,  142,   94,   10,
  288.   145,   94,   12,   38,   14,   69,   41,   10,   59,   36,
  289.    61,   38,   41,   40,   41,   94,  123,   94,  262,  141,
  290.    49,  274,   76,   10,   59,   54,  125,   38,  272,  273,
  291.    41,   10,   59,   36,  271,   38,   41,   40,   41,  125,
  292.   125,   25,   76,   94,   15,   96,   28,    4,   59,    6,
  293.   125,   -1,  125,   -1,   -1,   10,   59,   36,   -1,   38,
  294.    17,   40,   41,   20,   -1,   -1,  120,   -1,   97,   96,
  295.    -1,   -1,  123,  123,  125,   -1,   -1,   -1,   -1,   10,
  296.    59,   36,   -1,   38,   -1,   40,   41,   -1,   10,   -1,
  297.   125,   -1,   49,   96,   -1,   -1,  123,   -1,  125,   -1,
  298.    -1,   -1,   -1,   10,   59,   36,   -1,   38,   -1,   40,
  299.    41,   10,   -1,   -1,  125,   -1,   38,   96,   -1,   41,
  300.   123,   -1,  125,   10,  262,  263,   -1,   84,   59,   -1,
  301.    -1,   38,   89,   -1,  272,  273,   -1,   59,   -1,   38,
  302.    -1,   96,   41,   -1,   -1,   -1,  125,   -1,   -1,   -1,
  303.    -1,   38,   59,   -1,   -1,   -1,   10,   -1,   -1,   -1,
  304.    59,   -1,   -1,   -1,   -1,   96,   -1,   -1,   -1,   -1,
  305.   125,   -1,   59,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  306.    -1,   -1,  257,   -1,   38,   -1,  257,   41,   -1,  264,
  307.   269,   -1,  123,   -1,  125,  270,  271,   -1,   -1,  270,
  308.   271,   -1,   -1,  125,   -1,   59,  257,  258,  259,  260,
  309.   261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  310.   271,  272,  273,   -1,  275,  276,  277,  278,  279,  264,
  311.   257,  258,  259,  260,  261,  262,  263,  264,  265,  266,
  312.   267,  268,  269,  270,  271,  272,  273,  264,  275,  276,
  313.   277,  278,  279,  264,  257,  258,  259,  260,  261,  262,
  314.   263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
  315.   273,  125,  275,  276,  277,  278,  279,  264,  257,  258,
  316.   259,  260,  261,  262,  263,  264,  265,  266,  267,  268,
  317.   269,  270,  271,  272,  273,   -1,  275,  276,  277,  278,
  318.   279,   -1,  257,  258,  259,  260,  261,  262,  263,  264,
  319.   265,  266,  267,  268,  269,  270,  271,  272,  273,   -1,
  320.   275,  276,  277,  278,  279,   10,  257,  258,  259,  260,
  321.   261,   -1,  263,  264,  265,  266,  267,  268,  269,  270,
  322.   271,  272,  264,   -1,  275,  276,  277,  278,  279,   10,
  323.   257,   36,   -1,   38,   -1,   40,   41,  264,  257,   -1,
  324.    -1,   -1,   -1,  270,  271,   10,   -1,   -1,   -1,   -1,
  325.   257,  270,  271,   10,   59,   36,   -1,   38,   -1,   40,
  326.    41,    2,   -1,  270,  271,   -1,   -1,   -1,   -1,   10,
  327.    11,   -1,   64,   38,   -1,   10,   41,   -1,   59,   36,
  328.    -1,   38,   -1,   40,   41,   77,   78,   79,   -1,   30,
  329.   264,   96,   -1,   -1,   59,   -1,   -1,   10,   -1,   -1,
  330.    -1,   36,   59,   -1,   -1,   40,   41,   -1,   -1,   -1,
  331.    -1,   -1,   -1,   -1,   55,   96,   -1,   -1,  123,   10,
  332.   125,   62,   63,   36,   -1,  117,   -1,   40,   -1,   70,
  333.    -1,  123,   -1,   74,   -1,   -1,   10,   -1,   -1,   96,
  334.   132,   -1,   83,  135,  125,   36,   59,   -1,   -1,   40,
  335.    41,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  336.   125,   96,   -1,   -1,   38,   -1,  123,   41,  125,   -1,
  337.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   36,   10,   -1,
  338.    -1,   40,   -1,   96,   -1,   59,   -1,   -1,   -1,   -1,
  339.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,
  340.    -1,   -1,   -1,   -1,   -1,   96,   38,   -1,   -1,   41,
  341.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  342.    10,   -1,   -1,   -1,   -1,   38,   -1,   59,   41,   -1,
  343.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   96,   -1,   -1,
  344.    -1,   -1,   -1,   -1,   -1,   -1,   59,   -1,   38,   -1,
  345.    -1,  125,  257,  258,  259,   -1,  261,  262,   -1,  264,
  346.   265,  266,  267,  268,  123,  270,  271,  272,  273,   59,
  347.   275,  276,  277,  278,  279,   -1,  257,  258,  259,  260,
  348.   261,   -1,  263,  264,  265,  266,  267,  268,  269,  270,
  349.   271,  272,   -1,  125,  275,  276,  277,  278,  279,  264,
  350.   257,  258,  259,   -1,  261,  262,   -1,  264,  265,  266,
  351.   267,  268,  125,  270,  271,  272,  273,   -1,  275,  276,
  352.   277,  278,  279,  258,  259,  260,  261,   -1,  263,   -1,
  353.   265,  266,  267,  268,  269,  125,   -1,  272,   -1,   -1,
  354.   275,  276,  277,  278,  279,  258,  259,  260,  261,   -1,
  355.   263,   -1,  265,  266,  267,  268,  269,   -1,   -1,  272,
  356.    -1,   10,  275,  276,  277,  278,  279,  258,  259,  260,
  357.   261,   -1,  263,   10,  265,  266,  267,  268,  269,   -1,
  358.    -1,  272,   -1,  257,  275,  276,  277,  278,  279,   38,
  359.   264,   -1,   41,   10,   -1,   -1,  270,  271,   10,  258,
  360.   259,   38,  261,  262,   41,   -1,  265,  266,  267,  268,
  361.    59,   -1,   10,  272,  273,   -1,  275,  276,  277,  278,
  362.   279,   38,   59,   -1,   41,  257,   38,   -1,   10,   41,
  363.    -1,   -1,  264,   -1,   -1,   -1,   -1,   10,  270,  271,
  364.    38,   -1,   59,   41,  257,   -1,   -1,   59,   -1,   -1,
  365.    -1,  264,   -1,   -1,   10,   -1,   38,  270,  271,   41,
  366.    -1,   59,   10,   -1,   -1,   38,   -1,  257,   41,   -1,
  367.    -1,   -1,   -1,   -1,   -1,   -1,  125,   59,   -1,   -1,
  368.   270,  271,   38,   -1,   -1,   41,   59,   -1,  125,   -1,
  369.    38,   -1,   -1,   41,   -1,   -1,   -1,   -1,   -1,   -1,
  370.    -1,   36,   -1,   59,   -1,   40,   -1,   -1,  125,   -1,
  371.    -1,   59,   -1,  125,   -1,   -1,   -1,   -1,   -1,   -1,
  372.    -1,   -1,   -1,   -1,   36,   -1,   -1,  125,   40,   -1,
  373.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  374.    -1,   -1,   -1,  125,   -1,   -1,   -1,   -1,   -1,   36,
  375.    -1,   -1,  125,   40,   -1,   -1,   -1,   -1,   -1,   -1,
  376.    -1,   96,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  125,
  377.    -1,   -1,   -1,   -1,   -1,   36,   -1,  125,   -1,   40,
  378.    -1,   -1,   94,   -1,   96,   -1,   -1,   -1,   -1,   -1,
  379.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   36,   -1,   -1,
  380.    -1,   40,   41,   -1,   -1,   -1,   -1,   -1,  257,   96,
  381.    -1,  123,   -1,   -1,   -1,  264,   -1,   -1,   -1,   36,
  382.   257,  270,  271,   40,   41,   -1,   -1,  264,   -1,   -1,
  383.    -1,   -1,   -1,  270,  271,   96,  123,   -1,   -1,   -1,
  384.   257,   -1,   36,   -1,   -1,  257,   40,   -1,   -1,   -1,
  385.    -1,   -1,  264,  270,  271,   -1,   -1,   96,  270,  257,
  386.    -1,   -1,  123,   -1,   -1,   -1,  264,   -1,   -1,   -1,
  387.    -1,   -1,  270,   -1,   -1,  257,   36,   -1,   -1,   96,
  388.    40,   -1,  264,   -1,  257,   -1,   -1,   -1,  270,   -1,
  389.    -1,  264,   -1,   -1,   -1,   -1,   -1,  270,   -1,   36,
  390.    -1,  257,   96,   40,   -1,   -1,   -1,   -1,  264,  257,
  391.    -1,   -1,   -1,   -1,  270,   -1,  264,   -1,   -1,   -1,
  392.    -1,   -1,  270,  258,  259,  260,  261,  262,  263,  123,
  393.   265,  266,  267,  268,  269,   -1,   96,  272,  273,   -1,
  394.   275,  276,  277,  278,  279,   -1,  258,  259,  260,  261,
  395.    -1,  263,   -1,  265,  266,  267,  268,  269,   -1,   96,
  396.   272,   -1,   -1,  275,  276,  277,  278,  279,   -1,  256,
  397.    -1,  258,  259,   -1,  261,  262,   -1,   -1,  265,  266,
  398.   267,  268,   -1,   -1,   -1,  272,  273,   -1,  275,  276,
  399.   277,  278,  279,   -1,   -1,   -1,   -1,  258,  259,  260,
  400.   261,   -1,  263,   -1,  265,  266,  267,  268,  269,   36,
  401.    -1,  272,   -1,   40,  275,  276,  277,  278,  279,  258,
  402.   259,  260,  261,   -1,  263,   -1,  265,  266,  267,  268,
  403.   269,   -1,   -1,  272,   -1,   -1,  275,  276,  277,  278,
  404.   279,  258,  259,  260,  261,   -1,  263,   -1,  265,  266,
  405.   267,  268,  269,   -1,   -1,  272,   -1,   -1,  275,  276,
  406.   277,  278,  279,   -1,  258,  259,  260,  261,  262,   96,
  407.    -1,  265,  266,  267,  268,   -1,   -1,   -1,  272,  273,
  408.    -1,  275,  276,  277,  278,  279,   -1,   -1,   -1,   -1,
  409.    -1,   -1,   -1,   -1,   -1,   -1,  123,   -1,  258,  259,
  410.   260,  261,   -1,  263,   -1,  265,  266,  267,  268,  269,
  411.    -1,   -1,  272,   -1,   -1,  275,  276,  277,  278,  279,
  412.    -1,  258,  259,  260,  261,   -1,  263,   -1,  265,  266,
  413.   267,  268,  269,   -1,   -1,  272,   -1,   -1,  275,  276,
  414.   277,  278,  279,   -1,   -1,   -1,    0,   -1,   -1,   -1,
  415.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,
  416.    -1,   -1,   -1,   -1,   18,   -1,   -1,   -1,   22,   -1,
  417.    -1,   25,   -1,   -1,   -1,   29,   -1,   -1,   -1,   -1,
  418.    22,   -1,   -1,   25,   -1,   -1,   -1,   29,   -1,   -1,
  419.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   51,   -1,   -1,
  420.    -1,   -1,   56,   -1,   -1,   -1,   -1,   61,   -1,   51,
  421.    -1,   -1,   -1,   -1,   -1,   69,   -1,   -1,   -1,   61,
  422.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  423.    -1,  258,  259,   -1,  261,  262,   -1,   -1,  265,  266,
  424.   267,  268,   -1,   97,   -1,  272,  273,  101,  275,  276,
  425.   277,  278,  279,   -1,   -1,   97,  110,  111,  112,  101,
  426.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  110,  111,
  427.   112,   -1,   -1,   -1,   -1,   -1,   -1,  131,   -1,   -1,
  428.    -1,   -1,   -1,  137,  138,  139,   -1,   -1,  142,  131,
  429.    -1,  145,   -1,   -1,   -1,  137,  138,  139,   -1,   -1,
  430.   142,   -1,   -1,  145,
  431. };
  432. #define YYFINAL 21
  433. #ifndef YYDEBUG
  434. #define YYDEBUG 0
  435. #endif
  436. #define YYMAXTOKEN 280
  437. #if YYDEBUG
  438. char *yyname[] = {
  439. "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  440. 0,0,0,0,0,"'$'",0,"'&'",0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,
  441. "'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,
  442. "'`'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,
  443. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  444. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  445. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  446. 0,0,0,0,0,0,0,"ANDAND","BACKBACK","BANG","CASE","COUNT","DUP","ELSE","END",
  447. "FLAT","FN","FOR","IF","IN","OROR","PIPE","REDIR","SREDIR","SUB","SUBSHELL",
  448. "SWITCH","TWIDDLE","WHILE","WORD","HUH",
  449. };
  450. char *yyrule[] = {
  451. "$accept : rc",
  452. "rc : line end",
  453. "rc : error end",
  454. "end : END",
  455. "end : '\\n'",
  456. "cmdsa : cmd ';'",
  457. "cmdsa : cmd '&'",
  458. "line : cmd",
  459. "line : cmdsa line",
  460. "body : cmd",
  461. "body : cmdsan body",
  462. "cmdsan : cmdsa",
  463. "cmdsan : cmd '\\n'",
  464. "brace : '{' body '}'",
  465. "paren : '(' body ')'",
  466. "assign : first '=' word",
  467. "epilog :",
  468. "epilog : redir epilog",
  469. "redir : DUP",
  470. "redir : REDIR word",
  471. "redir : SREDIR word",
  472. "case : CASE words ';'",
  473. "case : CASE words '\\n'",
  474. "cbody : cmd",
  475. "cbody : case cbody",
  476. "cbody : cmdsan cbody",
  477. "iftail : cmd",
  478. "iftail : brace ELSE optnl cmd",
  479. "cmd :",
  480. "cmd : simple",
  481. "cmd : brace epilog",
  482. "cmd : IF paren optnl iftail",
  483. "cmd : FOR '(' word IN words ')' optnl cmd",
  484. "cmd : FOR '(' word ')' optnl cmd",
  485. "cmd : WHILE paren optnl cmd",
  486. "cmd : SWITCH '(' word ')' optnl '{' cbody '}'",
  487. "cmd : TWIDDLE optcaret word words",
  488. "cmd : cmd ANDAND optnl cmd",
  489. "cmd : cmd OROR optnl cmd",
  490. "cmd : cmd PIPE optnl cmd",
  491. "cmd : redir cmd",
  492. "cmd : assign cmd",
  493. "cmd : BANG optcaret cmd",
  494. "cmd : SUBSHELL optcaret cmd",
  495. "cmd : FN words brace",
  496. "cmd : FN words",
  497. "optcaret :",
  498. "optcaret : '^'",
  499. "simple : first",
  500. "simple : simple word",
  501. "simple : simple redir",
  502. "first : comword",
  503. "first : first '^' sword",
  504. "sword : comword",
  505. "sword : keyword",
  506. "word : sword",
  507. "word : word '^' sword",
  508. "comword : '$' sword",
  509. "comword : '$' sword SUB words ')'",
  510. "comword : COUNT sword",
  511. "comword : FLAT sword",
  512. "comword : '`' sword",
  513. "comword : '`' brace",
  514. "comword : BACKBACK word brace",
  515. "comword : BACKBACK word sword",
  516. "comword : '(' nlwords ')'",
  517. "comword : REDIR brace",
  518. "comword : WORD",
  519. "keyword : FOR",
  520. "keyword : IN",
  521. "keyword : WHILE",
  522. "keyword : IF",
  523. "keyword : SWITCH",
  524. "keyword : FN",
  525. "keyword : ELSE",
  526. "keyword : CASE",
  527. "keyword : TWIDDLE",
  528. "keyword : BANG",
  529. "keyword : SUBSHELL",
  530. "words :",
  531. "words : words word",
  532. "nlwords :",
  533. "nlwords : nlwords '\\n'",
  534. "nlwords : nlwords word",
  535. "optnl :",
  536. "optnl : optnl '\\n'",
  537. };
  538. #endif
  539. #define yyclearin (yychar=(-1))
  540. #define yyerrok (yyerrflag=0)
  541. #ifdef YYSTACKSIZE
  542. #ifndef YYMAXDEPTH
  543. #define YYMAXDEPTH YYSTACKSIZE
  544. #endif
  545. #else
  546. #ifdef YYMAXDEPTH
  547. #define YYSTACKSIZE YYMAXDEPTH
  548. #else
  549. #define YYSTACKSIZE 500
  550. #define YYMAXDEPTH 500
  551. #endif
  552. #endif
  553. int yydebug;
  554. int yynerrs;
  555. int yyerrflag;
  556. int yychar;
  557. short *yyssp;
  558. YYSTYPE *yyvsp;
  559. YYSTYPE yyval;
  560. YYSTYPE yylval;
  561. short yyss[YYSTACKSIZE];
  562. YYSTYPE yyvs[YYSTACKSIZE];
  563. #define yystacksize YYSTACKSIZE
  564. #line 169 "parse.y"
  565.  
  566. void initparse() {
  567.     star = treecpy(mk(nVar,mk(nWord,"*",NULL)), ealloc);
  568.     nolist = treecpy(mk(nVar,mk(nWord,"ifs",NULL)), ealloc);
  569. }
  570.  
  571. #line 572 "y.tab.c"
  572. #define YYABORT goto yyabort
  573. #define YYACCEPT goto yyaccept
  574. #define YYERROR goto yyerrlab
  575. int
  576. yyparse()
  577. {
  578.     register int yym, yyn, yystate;
  579. #if YYDEBUG
  580.     register char *yys;
  581.     extern char *getenv();
  582.  
  583.     if (yys = getenv("YYDEBUG"))
  584.     {
  585.         yyn = *yys;
  586.         if (yyn >= '0' && yyn <= '9')
  587.             yydebug = yyn - '0';
  588.     }
  589. #endif
  590.  
  591.     yynerrs = 0;
  592.     yyerrflag = 0;
  593.     yychar = (-1);
  594.  
  595.     yyssp = yyss;
  596.     yyvsp = yyvs;
  597.     *yyssp = yystate = 0;
  598.  
  599. yyloop:
  600.     if (yyn = yydefred[yystate]) goto yyreduce;
  601.     if (yychar < 0)
  602.     {
  603.         if ((yychar = yylex()) < 0) yychar = 0;
  604. #if YYDEBUG
  605.         if (yydebug)
  606.         {
  607.             yys = 0;
  608.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  609.             if (!yys) yys = "illegal-symbol";
  610.             printf("yydebug: state %d, reading %d (%s)\n", yystate,
  611.                     yychar, yys);
  612.         }
  613. #endif
  614.     }
  615.     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
  616.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  617.     {
  618. #if YYDEBUG
  619.         if (yydebug)
  620.             printf("yydebug: state %d, shifting to state %d\n",
  621.                     yystate, yytable[yyn]);
  622. #endif
  623.         if (yyssp >= yyss + yystacksize - 1)
  624.         {
  625.             goto yyoverflow;
  626.         }
  627.         *++yyssp = yystate = yytable[yyn];
  628.         *++yyvsp = yylval;
  629.         yychar = (-1);
  630.         if (yyerrflag > 0)  --yyerrflag;
  631.         goto yyloop;
  632.     }
  633.     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
  634.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  635.     {
  636.         yyn = yytable[yyn];
  637.         goto yyreduce;
  638.     }
  639.     if (yyerrflag) goto yyinrecovery;
  640. #ifdef lint
  641.     goto yynewerror;
  642. #endif
  643. yynewerror:
  644.     yyerror("syntax error");
  645. #ifdef lint
  646.     goto yyerrlab;
  647. #endif
  648. yyerrlab:
  649.     ++yynerrs;
  650. yyinrecovery:
  651.     if (yyerrflag < 3)
  652.     {
  653.         yyerrflag = 3;
  654.         for (;;)
  655.         {
  656.             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
  657.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  658.             {
  659. #if YYDEBUG
  660.                 if (yydebug)
  661.                     printf("yydebug: state %d, error recovery shifting\
  662.  to state %d\n", *yyssp, yytable[yyn]);
  663. #endif
  664.                 if (yyssp >= yyss + yystacksize - 1)
  665.                 {
  666.                     goto yyoverflow;
  667.                 }
  668.                 *++yyssp = yystate = yytable[yyn];
  669.                 *++yyvsp = yylval;
  670.                 goto yyloop;
  671.             }
  672.             else
  673.             {
  674. #if YYDEBUG
  675.                 if (yydebug)
  676.                     printf("yydebug: error recovery discarding state %d\n",
  677.                             *yyssp);
  678. #endif
  679.                 if (yyssp <= yyss) goto yyabort;
  680.                 --yyssp;
  681.                 --yyvsp;
  682.             }
  683.         }
  684.     }
  685.     else
  686.     {
  687.         if (yychar == 0) goto yyabort;
  688. #if YYDEBUG
  689.         if (yydebug)
  690.         {
  691.             yys = 0;
  692.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  693.             if (!yys) yys = "illegal-symbol";
  694.             printf("yydebug: state %d, error recovery discards token %d (%s)\n",
  695.                     yystate, yychar, yys);
  696.         }
  697. #endif
  698.         yychar = (-1);
  699.         goto yyloop;
  700.     }
  701. yyreduce:
  702. #if YYDEBUG
  703.     if (yydebug)
  704.         printf("yydebug: state %d, reducing by rule %d (%s)\n",
  705.                 yystate, yyn, yyrule[yyn]);
  706. #endif
  707.     yym = yylen[yyn];
  708.     yyval = yyvsp[1-yym];
  709.     switch (yyn)
  710.     {
  711. case 1:
  712. #line 49 "parse.y"
  713. { parsetree = yyvsp[-1].node; YYACCEPT; }
  714. break;
  715. case 2:
  716. #line 50 "parse.y"
  717. { yyerrok; parsetree = NULL; YYABORT; }
  718. break;
  719. case 3:
  720. #line 53 "parse.y"
  721. { if (!heredoc(1)) YYABORT; }
  722. break;
  723. case 4:
  724. #line 54 "parse.y"
  725. { if (!heredoc(0)) YYABORT; }
  726. break;
  727. case 6:
  728. #line 58 "parse.y"
  729. { yyval.node = (yyvsp[-1].node != NULL ? mk(nNowait,yyvsp[-1].node) : yyvsp[-1].node); }
  730. break;
  731. case 8:
  732. #line 62 "parse.y"
  733. { yyval.node = (yyvsp[-1].node != NULL ? mk(nBody,yyvsp[-1].node,yyvsp[0].node) : yyvsp[0].node); }
  734. break;
  735. case 10:
  736. #line 66 "parse.y"
  737. { yyval.node = (yyvsp[-1].node == NULL ? yyvsp[0].node : yyvsp[0].node == NULL ? yyvsp[-1].node : mk(nBody,yyvsp[-1].node,yyvsp[0].node)); }
  738. break;
  739. case 12:
  740. #line 69 "parse.y"
  741. { yyval.node = yyvsp[-1].node; if (!heredoc(0)) YYABORT; }
  742. break;
  743. case 13:
  744. #line 71 "parse.y"
  745. { yyval.node = yyvsp[-1].node; }
  746. break;
  747. case 14:
  748. #line 73 "parse.y"
  749. { yyval.node = yyvsp[-1].node; }
  750. break;
  751. case 15:
  752. #line 75 "parse.y"
  753. { yyval.node = mk(nAssign,yyvsp[-2].node,yyvsp[0].node); }
  754. break;
  755. case 16:
  756. #line 77 "parse.y"
  757. { yyval.node = NULL; }
  758. break;
  759. case 17:
  760. #line 78 "parse.y"
  761. { yyval.node = mk(nEpilog,yyvsp[-1].node,yyvsp[0].node); }
  762. break;
  763. case 18:
  764. #line 81 "parse.y"
  765. { yyval.node = mk(nDup,yyvsp[0].dup.type,yyvsp[0].dup.left,yyvsp[0].dup.right); }
  766. break;
  767. case 19:
  768. #line 82 "parse.y"
  769. { yyval.node = mk(nRedir,yyvsp[-1].redir.type,yyvsp[-1].redir.fd,yyvsp[0].node);
  770.                   if (yyvsp[-1].redir.type == rHeredoc && !qdoc(yyvsp[0].node, yyval.node)) YYABORT; /* queue heredocs up */
  771.                 }
  772. break;
  773. case 20:
  774. #line 85 "parse.y"
  775. { yyval.node = mk(nRedir,yyvsp[-1].redir.type,yyvsp[-1].redir.fd,yyvsp[0].node);
  776.                   if (yyvsp[-1].redir.type == rHeredoc && !qdoc(yyvsp[0].node, yyval.node)) YYABORT; /* queue heredocs up */
  777.                 }
  778. break;
  779. case 21:
  780. #line 89 "parse.y"
  781. { yyval.node = mk(nCase, yyvsp[-1].node); }
  782. break;
  783. case 22:
  784. #line 90 "parse.y"
  785. { yyval.node = mk(nCase, yyvsp[-1].node); }
  786. break;
  787. case 23:
  788. #line 92 "parse.y"
  789. { yyval.node = mk(nCbody, yyvsp[0].node, NULL); }
  790. break;
  791. case 24:
  792. #line 93 "parse.y"
  793. { yyval.node = mk(nCbody, yyvsp[-1].node, yyvsp[0].node); }
  794. break;
  795. case 25:
  796. #line 94 "parse.y"
  797. { yyval.node = mk(nCbody, yyvsp[-1].node, yyvsp[0].node); }
  798. break;
  799. case 27:
  800. #line 97 "parse.y"
  801. { yyval.node = mk(nElse,yyvsp[-3].node,yyvsp[0].node); }
  802. break;
  803. case 28:
  804. #line 99 "parse.y"
  805. { yyval.node = NULL; }
  806. break;
  807. case 30:
  808. #line 101 "parse.y"
  809. { yyval.node = mk(nBrace,yyvsp[-1].node,yyvsp[0].node); }
  810. break;
  811. case 31:
  812. #line 102 "parse.y"
  813. { yyval.node = mk(nIf,yyvsp[-2].node,yyvsp[0].node); }
  814. break;
  815. case 32:
  816. #line 103 "parse.y"
  817. { yyval.node = mk(nForin,yyvsp[-5].node,yyvsp[-3].node,yyvsp[0].node); }
  818. break;
  819. case 33:
  820. #line 104 "parse.y"
  821. { yyval.node = mk(nForin,yyvsp[-3].node,star,yyvsp[0].node); }
  822. break;
  823. case 34:
  824. #line 105 "parse.y"
  825. { yyval.node = mk(nWhile,yyvsp[-2].node,yyvsp[0].node); }
  826. break;
  827. case 35:
  828. #line 106 "parse.y"
  829. { yyval.node = mk(nSwitch,yyvsp[-5].node,yyvsp[-1].node); }
  830. break;
  831. case 36:
  832. #line 107 "parse.y"
  833. { yyval.node = mk(nMatch,yyvsp[-1].node,yyvsp[0].node); }
  834. break;
  835. case 37:
  836. #line 108 "parse.y"
  837. { yyval.node = mk(nAndalso,yyvsp[-3].node,yyvsp[0].node); }
  838. break;
  839. case 38:
  840. #line 109 "parse.y"
  841. { yyval.node = mk(nOrelse,yyvsp[-3].node,yyvsp[0].node); }
  842. break;
  843. case 39:
  844. #line 110 "parse.y"
  845. { yyval.node = mk(nPipe,yyvsp[-2].pipe.left,yyvsp[-2].pipe.right,yyvsp[-3].node,yyvsp[0].node); }
  846. break;
  847. case 40:
  848. #line 111 "parse.y"
  849. { yyval.node = (yyvsp[0].node != NULL ? mk(nPre,yyvsp[-1].node,yyvsp[0].node) : yyvsp[-1].node); }
  850. break;
  851. case 41:
  852. #line 112 "parse.y"
  853. { yyval.node = (yyvsp[0].node != NULL ? mk(nPre,yyvsp[-1].node,yyvsp[0].node) : yyvsp[-1].node); }
  854. break;
  855. case 42:
  856. #line 113 "parse.y"
  857. { yyval.node = mk(nBang,yyvsp[0].node); }
  858. break;
  859. case 43:
  860. #line 114 "parse.y"
  861. { yyval.node = mk(nSubshell,yyvsp[0].node); }
  862. break;
  863. case 44:
  864. #line 115 "parse.y"
  865. { yyval.node = mk(nNewfn,yyvsp[-1].node,yyvsp[0].node); }
  866. break;
  867. case 45:
  868. #line 116 "parse.y"
  869. { yyval.node = mk(nRmfn,yyvsp[0].node); }
  870. break;
  871. case 49:
  872. #line 122 "parse.y"
  873. { yyval.node = (yyvsp[0].node != NULL ? mk(nArgs,yyvsp[-1].node,yyvsp[0].node) : yyvsp[-1].node); }
  874. break;
  875. case 50:
  876. #line 123 "parse.y"
  877. { yyval.node = mk(nArgs,yyvsp[-1].node,yyvsp[0].node); }
  878. break;
  879. case 52:
  880. #line 126 "parse.y"
  881. { yyval.node = mk(nConcat,yyvsp[-2].node,yyvsp[0].node); }
  882. break;
  883. case 54:
  884. #line 129 "parse.y"
  885. { yyval.node = mk(nWord,yyvsp[0].keyword, NULL); }
  886. break;
  887. case 56:
  888. #line 132 "parse.y"
  889. { yyval.node = mk(nConcat,yyvsp[-2].node,yyvsp[0].node); }
  890. break;
  891. case 57:
  892. #line 134 "parse.y"
  893. { yyval.node = mk(nVar,yyvsp[0].node); }
  894. break;
  895. case 58:
  896. #line 135 "parse.y"
  897. { yyval.node = mk(nVarsub,yyvsp[-3].node,yyvsp[-1].node); }
  898. break;
  899. case 59:
  900. #line 136 "parse.y"
  901. { yyval.node = mk(nCount,yyvsp[0].node); }
  902. break;
  903. case 60:
  904. #line 137 "parse.y"
  905. { yyval.node = mk(nFlat, yyvsp[0].node); }
  906. break;
  907. case 61:
  908. #line 138 "parse.y"
  909. { yyval.node = mk(nBackq,nolist,yyvsp[0].node); }
  910. break;
  911. case 62:
  912. #line 139 "parse.y"
  913. { yyval.node = mk(nBackq,nolist,yyvsp[0].node); }
  914. break;
  915. case 63:
  916. #line 140 "parse.y"
  917. { yyval.node = mk(nBackq,yyvsp[-1].node,yyvsp[0].node); }
  918. break;
  919. case 64:
  920. #line 141 "parse.y"
  921. { yyval.node = mk(nBackq,yyvsp[-1].node,yyvsp[0].node); }
  922. break;
  923. case 65:
  924. #line 142 "parse.y"
  925. { yyval.node = yyvsp[-1].node; }
  926. break;
  927. case 66:
  928. #line 143 "parse.y"
  929. { yyval.node = mk(nNmpipe,yyvsp[-1].redir.type,yyvsp[-1].redir.fd,yyvsp[0].node); }
  930. break;
  931. case 67:
  932. #line 144 "parse.y"
  933. { yyval.node = (yyvsp[0].word.w[0] == '\'') ? mk(nQword, yyvsp[0].word.w+1, NULL) : mk(nWord,yyvsp[0].word.w, yyvsp[0].word.m); }
  934. break;
  935. case 68:
  936. #line 146 "parse.y"
  937. { yyval.keyword = "for"; }
  938. break;
  939. case 69:
  940. #line 147 "parse.y"
  941. { yyval.keyword = "in"; }
  942. break;
  943. case 70:
  944. #line 148 "parse.y"
  945. { yyval.keyword = "while"; }
  946. break;
  947. case 71:
  948. #line 149 "parse.y"
  949. { yyval.keyword = "if"; }
  950. break;
  951. case 72:
  952. #line 150 "parse.y"
  953. { yyval.keyword = "switch"; }
  954. break;
  955. case 73:
  956. #line 151 "parse.y"
  957. { yyval.keyword = "fn"; }
  958. break;
  959. case 74:
  960. #line 152 "parse.y"
  961. { yyval.keyword = "else"; }
  962. break;
  963. case 75:
  964. #line 153 "parse.y"
  965. { yyval.keyword = "case"; }
  966. break;
  967. case 76:
  968. #line 154 "parse.y"
  969. { yyval.keyword = "~"; }
  970. break;
  971. case 77:
  972. #line 155 "parse.y"
  973. { yyval.keyword = "!"; }
  974. break;
  975. case 78:
  976. #line 156 "parse.y"
  977. { yyval.keyword = "@"; }
  978. break;
  979. case 79:
  980. #line 158 "parse.y"
  981. { yyval.node = NULL; }
  982. break;
  983. case 80:
  984. #line 159 "parse.y"
  985. { yyval.node = (yyvsp[-1].node != NULL ? (yyvsp[0].node != NULL ? mk(nLappend,yyvsp[-1].node,yyvsp[0].node) : yyvsp[-1].node) : yyvsp[0].node); }
  986. break;
  987. case 81:
  988. #line 161 "parse.y"
  989. { yyval.node = NULL; }
  990. break;
  991. case 83:
  992. #line 163 "parse.y"
  993. { yyval.node = (yyvsp[-1].node != NULL ? (yyvsp[0].node != NULL ? mk(nLappend,yyvsp[-1].node,yyvsp[0].node) : yyvsp[-1].node) : yyvsp[0].node); }
  994. break;
  995. #line 996 "y.tab.c"
  996.     }
  997.     yyssp -= yym;
  998.     yystate = *yyssp;
  999.     yyvsp -= yym;
  1000.     yym = yylhs[yyn];
  1001.     if (yystate == 0 && yym == 0)
  1002.     {
  1003. #if YYDEBUG
  1004.         if (yydebug)
  1005.             printf("yydebug: after reduction, shifting from state 0 to\
  1006.  state %d\n", YYFINAL);
  1007. #endif
  1008.         yystate = YYFINAL;
  1009.         *++yyssp = YYFINAL;
  1010.         *++yyvsp = yyval;
  1011.         if (yychar < 0)
  1012.         {
  1013.             if ((yychar = yylex()) < 0) yychar = 0;
  1014. #if YYDEBUG
  1015.             if (yydebug)
  1016.             {
  1017.                 yys = 0;
  1018.                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1019.                 if (!yys) yys = "illegal-symbol";
  1020.                 printf("yydebug: state %d, reading %d (%s)\n",
  1021.                         YYFINAL, yychar, yys);
  1022.             }
  1023. #endif
  1024.         }
  1025.         if (yychar == 0) goto yyaccept;
  1026.         goto yyloop;
  1027.     }
  1028.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  1029.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  1030.         yystate = yytable[yyn];
  1031.     else
  1032.         yystate = yydgoto[yym];
  1033. #if YYDEBUG
  1034.     if (yydebug)
  1035.         printf("yydebug: after reduction, shifting from state %d \
  1036. to state %d\n", *yyssp, yystate);
  1037. #endif
  1038.     if (yyssp >= yyss + yystacksize - 1)
  1039.     {
  1040.         goto yyoverflow;
  1041.     }
  1042.     *++yyssp = yystate;
  1043.     *++yyvsp = yyval;
  1044.     goto yyloop;
  1045. yyoverflow:
  1046.     yyerror("yacc stack overflow");
  1047. yyabort:
  1048.     return (1);
  1049. yyaccept:
  1050.     return (0);
  1051. }
  1052.